ES5 数组新增API
1 数组的length属性,该属性是可读可写的
|
|
2 Array.isArray(value) 该方法用来判断传递进来的参数是不是数组,如果是则返回true,否则返回false;
Array.from(arrayLike[, mapFn[, thisArg]])
参数
arrayLike
想要转换成真实数组的类数组对象 (只要该对象有length属性即可)或可遍历对象
mapFn
可选参数,如果指定了该参数,则最后生成的数组会经过该函数的加工处理后再返回。
thisArg
可选参数,执行 mapFn 函数时 this 的值。
返回值
一个新的Array实例
|
|
3 Array.prototype.map (callback,thisArg ) 数组的map方法将向callback函数中传递三个参数,依次是每个数组元素,当前数组元素的索引,当前数组,callback执行的返回值 会作为数组元素添加到一个新的数组中去;
|
|
|
|
|
|
|
|
在网上又看到了一个更好地办法
|
|
|
|
3.1 callback 函数只会在有值的索引上被调用;那些数组中未初始化的元素或者使用 delete删除的索引则不会被调用
|
|
4 Array.prototype.forEach( callback , thisArg ) 数组的forEach 方法向callback回调函数中传递3 个参数,依次是每个数组元素,当前数组元素的索引,当前数组,forEach API 不像map API ,forEach每次执行callback并没有接受返回值,也不会返回一个数组,而map会将callback的返回值(如果没有显式的返回,则默认undefined),形成一个新的数组,然后返回这个新的数组;
|
|
|
|
4.1 forEach 没有办法中止或者跳出 forEach 循环,除了抛出一个异常
|
|
|
|
4.2 如果在遍历的过程中,某个元素被删除了,那么会直接跳过该元素
|
|
4.3 forEach函数的返回值是undefined,所以它不能像map或者reduce函数那样,可以链式调用数组的方法,因为map函数会将callback每次的返回值存在一个数组中整体返回
|
|
4.4 forEach 方法按升序为数组中含有效值的每一项执行一次callback 函数,那些已删除(使用delete方法等情况)或者未初始化的项将被跳过(但不包括那些值为 undefined 的项)
|
|
5 Array.prototype.every( callback , thisArg ) 数组的every方法向callback回调函数中传递3 个参数,依次是每个数组元素,当前数组元素的索引,当前数组,返回值是布尔类型;当执行某个元素返回值是false的时候,终止every函数的执行,返回false;只有当每个元素执行结果为true,最终才能返回true;
而 Array.prototype.some(callback ,thisArg) 和every基本上一样,只要有一个数组元素执行callback结果是true,那么就返回true,停止当前循环,不再进行后面的循环遍历操作;
|
|
|
|
6 Array.prototype.reduce(callback ,[initialValue]) (reduceRight函数和reduce函数类似,只不是从数组的最后反向开始迭代);数组的reduce方法向callback函数传递四个参数,分别是
|
|
reduce如何工作?
|
|
callback |
accumulator |
currentValue |
currentIndex |
array |
return value |
---|---|---|---|---|---|
first call | 0 |
1 |
1 |
[0, 1, 2, 3, 4] |
1 |
second call | 1 |
2 |
2 |
[0, 1, 2, 3, 4] |
3 |
third call | 3 |
3 |
3 |
[0, 1, 2, 3, 4] |
6 |
fourth call | 6 |
4 |
4 |
[0, 1, 2, 3, 4] |
10 |
|
|
callback |
accumulator |
currentValue |
currentIndex |
array |
return value |
---|---|---|---|---|---|
first call | 10 |
0 |
0 |
[0, 1, 2, 3, 4] |
10 |
second call | 10 |
1 |
1 |
[0, 1, 2, 3, 4] |
11 |
third call | 11 |
2 |
2 |
[0, 1, 2, 3, 4] |
13 |
fourth call | 13 |
3 |
3 |
[0, 1, 2, 3, 4] |
16 |
fifth call | 16 |
4 |
4 |
[0, 1, 2, 3, 4] |
20 |
reduce将callback函数的返回值作为accumulator传递给callback重复执行;
ruduce函数经常用来扁平化数组
|
|
7 Array.prototype.filter( callback ,thisArg ) filter向callback传递参数 依次是每个数组元素,当前数组元素的索引,当前数组。该方法返回一个新的数组,不改变原数组; filter函数对每个数组元素进行判断,满足条件的会保存下来,返回到新的数组当中,不满足条件的话进行下一个数组元素的判断(其实本质是如果callback函数返回true,那么保留当前数组元素,如果callback函数返回false,不保留该数组元素,那么进行对下一个数组元素的判断)
|
|
8 Array.prototype.keys( ) 返回的结果是一个Array迭代器
|
|
9 Array.prototype.indexOf()
indexOf
使用strict equality (无论是 ===, 还是 triple-equals操作符都基于同样的方法)进行判断 searchElement与
数组中包含的元素之间的关系。
注意比较下面的情况,对于复杂数据类型,比较的是引用地址是否指向同一个地址,如果是则能找到,返回其对应的索引值,如果不是,则找不到,返回-1
|
|
|
|